import requests
import json

# Odoo 服务器信息
odoo_url = 'http://your-odoo-server.com'
db = 'your_database_name'
username = 'your_username'
password = 'your_password'


# 获取访问令牌信息
def odoo_login():
    login_url = f'{odoo_url}/web/session/authenticate'
    payload = {
        'jsonrpc': '2.0',
        'params': {
            'db': db,
            'login': username,
            'password': password,
        }
    }
    response = requests.post(login_url, json=payload)
    return response.json()

# 测试访问odoo
def get_partners_info():
    session_info = odoo_login()
    uid = session_info['result']['uid']

    # 访问令牌
    headers = {
        'Content-Type': 'application/json',
        'X-Openerp-Session-Id': session_info['result']['session_id'],
    }

    # 调用 Odoo 的 search_read 方法以获取数据
    search_url = f'{odoo_url}/jsonrpc'
    search_payload = {
        'jsonrpc': '2.0',
        'method': 'call',
        'args': [
            db,
            uid,
            password,
            'res.partner',  # 访问的 模型
            'search_read',  # 搜索
            [],  # 搜索条件，这里为空表示获取所有记录
            {'fields': ['id', 'name', 'email'], 'limit': 10}  # 指定需要返回的字段和限制记录数
        ],
        'id': 1,
    }

    create_payload = {
        'jsonrpc': '2.0',
        'method': 'call',
        'args': [
            db,             # 数据库名
            uid,            # 账号
            password,       # 密码
            'res.partner',  # 访问的 模型
            'create',  # 方法名
            {
                "name": "New Partner",  # 名称
                "email": "newpartner@example.com"  # 电子邮件
            }
        ],
        'id': 1,
    }

    updata_payload = {
        'jsonrpc': '2.0',
        'method': 'call',
        'args': [
            db,  # 数据库名
            uid,  # 账号
            password,  # 密码
            'res.partner',  # 访问的 模型
            'write',  # 方法名
            [[1, 2]],  # 记录 ID 数组
            {
                "name": "New Partner",  # 要更新的字段
                "email": "newpartner@example.com"
            }
        ],
        'id': 1,
    }

    unlink_payload = {
        'jsonrpc': '2.0',
        'method': 'call',
        'args': [
            db,  # 数据库名
            uid,  # 账号
            password,  # 密码
            'res.partner',  # 访问的 模型
            'write',  # 方法名
            [[1, 2]],  # 记录 ID 数组
        ],
        'id': 1,
    }

    custom_method = {
        'jsonrpc': '2.0',
        'method': 'call',
        'args': [
            db,  # 数据库名
            uid,  # 账号
            password,  # 密码
            'res.partner',  # 访问的 模型
            'custom_method',  # 方法名
            ['demo', "Some Parameter"]  # 参数，可以根据需要传递
        ],
        'id': 1,
    }

    response = requests.post(search_url, headers=headers, json=search_payload)
    return response.json()


if __name__ == '__main__':
    partners_data = get_partners_info()
    print(json.dumps(partners_data, indent=4))